package com.icinfo.cloud.provider.punish.ucase.punishexecute.service;

import com.icinfo.cloud.provider.punish.ucase.punishexecute.dto.CasePunishActionDto;
import com.icinfo.cloud.provider.punish.ucase.punishexecute.dto.EnforceExecuteApplyInfoQueryDto;
import com.icinfo.cloud.provider.punish.ucase.punishexecute.dto.EnforceExecuteApplyInfoSaveDto;
import com.icinfo.cloud.provider.punish.ucase.punishexecute.vo.EnforceExecuteApplyInfoVo;
import com.icinfo.cloud.provider.punish.ucase.punishinform.dto.ExecuteFinishInfoQueryDto;
import com.icinfo.cloud.provider.punish.ucase.punishinform.vo.CaseExecuteInfoVo;
import com.icinfo.cloud.provider.punish.ucase.punishinform.vo.ExecuteFinishInfoVo;
import com.icinfo.framework.common.web.Result;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.Map;

/**
 * 描述：处罚执行服务
 *
 * @author xiangyuyu
 * @date 2022/4/9 10:58
 */
public interface ICaseExecuteService {

    /**
     * 【V1.1.0】描述：保存强制执行申请信息
     *
     * @param saveDto {@link EnforceExecuteApplyInfoSaveDto}
     * @return {@link Result <String>} 保存结果
     * @author xiangyuyu
     * @date 2022-04-09 11:57
     */
    Result<String> saveEnforceExecuteApplyInfo(EnforceExecuteApplyInfoSaveDto saveDto);

    /**
     * 【V1.1.0】描述：获取强制执行申请信息
     *
     * @param queryDto {@link EnforceExecuteApplyInfoQueryDto}
     * @return {@link EnforceExecuteApplyInfoVo} 强制执行申请信息
     * @author xiangyuyu
     * @date 2022-04-09 11:57
     */
    EnforceExecuteApplyInfoVo getEnforceExecuteApplyInfo(EnforceExecuteApplyInfoQueryDto queryDto);


    /**
     * 【V1.0.0】描述：保存处罚执行信息
     *
     * @param  casePunishActionDto
     * @return
     * @author 程亚运
     * @date 2022-02-16 16:02
     */
    Map<String,Object> savePunishExecuteInfo(CasePunishActionDto casePunishActionDto);


    /**
     * 【V1.1.0】描述：获取执行完成情况信息
     *
     * @param queryDto {@link ExecuteFinishInfoQueryDto}
     * @return {@link Result<ExecuteFinishInfoVo>} 执行完成情况信息
     * @author xiangyuyu
     * @date 2022-04-09 11:57
     */
    ExecuteFinishInfoVo getExecuteFinishInfo(ExecuteFinishInfoQueryDto queryDto);

    /**
     * 【V2.0.0】描述：重新构造执行情况文书内容
     *
     * @return {@link Result<String>} 操作结果
     * @author xiangyuyu
     * @date 2022-05-18 10:07
     */
    Result<String> refactorExecuteConditionDoc();

    /**
     * 描述：执行流程滚动
     *
     * @param caseId              案件id
     * @param partyId             当事人id
     * @param documentCatalogCode 文书目录编码
     * @return Map<String, Object> 环节滚动信息
     * @author xiangyuyu
     * @date 2022-05-30 09:43
     */
    Map<String, Object> executeFlowRoll(String caseId, String partyId, String documentCatalogCode);

    /**
     * 描述：所有分支流程都已执行完成时后续操作
     *
     * @param caseId 案件id
     * @return boolean 所有分支流程都已执行完成 (true-是/false-否)
     * @author xiangyuyu
     * @date 2022-06-15 16:00
     */
    boolean dealAfterAllBranchFlowExecuteFinish(String caseId);


    /**
     * 根据案件id查询案件的执行情况
     * @param caseId
     * @return
     */
    CaseExecuteInfoVo getExecuteInfoByCaseId(String caseId);

}
